Примеры.
Редактировал(а) Alexandr Fokin 2025/09/20 11:33
1) Обновление строки по ключу.
Необходимый уровень изоляции | Запрос | Комментарий | |||||||||
Замечание: в приведенных ниже примерах не рассматриваются сценарии с использованием Оптимистичная блокировка. Механизмы БД и Пессимистичная блокировка. | |||||||||||
READ COMMITTED | BEGIN; -- Проверка UPDATE accounts SET balance = balance + @payment WHERE acctnum = @account1 UPDATE accounts SET balance = balance - @payment WHERE acctnum = @account2 COMMIT; |
(В данном случае строка заблокируется в момент обновления (update). Чтение (select) с проверкой условия без явного указания updatelock не будет удерживать блокировку, строка может быть изменена после проверки условия). | |||||||||
REPEATABLE READ |
|
(В данном случае чтение (select) удерживает share блокировку, что гарантирует, что строка не будет изменена. Но параллельный переход от sharelock к updatelock приводит к deadlock, поэтому может быть лучше сразу накладывать updatelock). Данное поведение также может быть реализовано на уровне READ COMMITTED, но для этого нужно явно выполнять чтение с updatelock. |